// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Compute Engine Instance Group Manager API Version v1beta2
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/compute/docs/instance-groups/manager/v1beta2'>Google Compute Engine Instance Group Manager API</a>
 *      <tr><th>API Version<td>v1beta2
 *      <tr><th>API Rev<td>20160512 (497)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/compute/docs/instance-groups/manager/v1beta2'>
 *              https://developers.google.com/compute/docs/instance-groups/manager/v1beta2</a>
 *      <tr><th>Discovery Name<td>replicapool
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Compute Engine Instance Group Manager API can be found at
 * <a href='https://developers.google.com/compute/docs/instance-groups/manager/v1beta2'>https://developers.google.com/compute/docs/instance-groups/manager/v1beta2</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Replicapool.v1beta2
{
    /// <summary>The Replicapool Service.</summary>
    public class ReplicapoolService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1beta2";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ReplicapoolService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ReplicapoolService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            instanceGroupManagers = new InstanceGroupManagersResource(this);
            zoneOperations = new ZoneOperationsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "replicapool"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/replicapool/v1beta2/projects/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "replicapool/v1beta2/projects/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Compute Engine Instance Group Manager API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your data across Google Cloud Platform services</summary>
            public static string CloudPlatformReadOnly = "https://www.googleapis.com/auth/cloud-platform.read-only";

            /// <summary>View and manage your Google Compute Engine resources</summary>
            public static string Compute = "https://www.googleapis.com/auth/compute";

            /// <summary>View your Google Compute Engine resources</summary>
            public static string ComputeReadonly = "https://www.googleapis.com/auth/compute.readonly";

        }



        private readonly InstanceGroupManagersResource instanceGroupManagers;

        /// <summary>Gets the InstanceGroupManagers resource.</summary>
        public virtual InstanceGroupManagersResource InstanceGroupManagers
        {
            get { return instanceGroupManagers; }
        }

        private readonly ZoneOperationsResource zoneOperations;

        /// <summary>Gets the ZoneOperations resource.</summary>
        public virtual ZoneOperationsResource ZoneOperations
        {
            get { return zoneOperations; }
        }
    }

    ///<summary>A base abstract class for Replicapool requests.</summary>
    public abstract class ReplicapoolBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new ReplicapoolBaseServiceRequest instance.</summary>
        protected ReplicapoolBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Replicapool parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "instanceGroupManagers" collection of methods.</summary>
    public class InstanceGroupManagersResource
    {
        private const string Resource = "instanceGroupManagers";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public InstanceGroupManagersResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Removes the specified instances from the managed instance group, and from any target pools of which
        /// they were members, without deleting the instances.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        public virtual AbandonInstancesRequest AbandonInstances(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersAbandonInstancesRequest body, string project, string zone, string instanceGroupManager)
        {
            return new AbandonInstancesRequest(service, body, project, zone, instanceGroupManager);
        }

        /// <summary>Removes the specified instances from the managed instance group, and from any target pools of which
        /// they were members, without deleting the instances.</summary>
        public class AbandonInstancesRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new AbandonInstances request.</summary>
            public AbandonInstancesRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersAbandonInstancesRequest body, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersAbandonInstancesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "abandonInstances"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances"; }
            }

            /// <summary>Initializes AbandonInstances parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Deletes the instance group manager and all instances contained within. If you'd like to delete the
        /// manager without deleting the instances, you must first abandon the instances to remove them from the
        /// group.</summary>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">Name of the
        /// Instance Group Manager resource to delete.</param>
        public virtual DeleteRequest Delete(string project, string zone, string instanceGroupManager)
        {
            return new DeleteRequest(service, project, zone, instanceGroupManager);
        }

        /// <summary>Deletes the instance group manager and all instances contained within. If you'd like to delete the
        /// manager without deleting the instances, you must first abandon the instances to remove them from the
        /// group.</summary>
        public class DeleteRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Name of the Instance Group Manager resource to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Deletes the specified instances. The instances are deleted, then removed from the instance group
        /// and any target pools of which they were a member. The targetSize of the instance group manager is reduced by
        /// the number of instances deleted.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        public virtual DeleteInstancesRequest DeleteInstances(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersDeleteInstancesRequest body, string project, string zone, string instanceGroupManager)
        {
            return new DeleteInstancesRequest(service, body, project, zone, instanceGroupManager);
        }

        /// <summary>Deletes the specified instances. The instances are deleted, then removed from the instance group
        /// and any target pools of which they were a member. The targetSize of the instance group manager is reduced by
        /// the number of instances deleted.</summary>
        public class DeleteInstancesRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new DeleteInstances request.</summary>
            public DeleteInstancesRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersDeleteInstancesRequest body, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersDeleteInstancesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "deleteInstances"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances"; }
            }

            /// <summary>Initializes DeleteInstances parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Returns the specified Instance Group Manager resource.</summary>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">Name of the
        /// instance resource to return.</param>
        public virtual GetRequest Get(string project, string zone, string instanceGroupManager)
        {
            return new GetRequest(service, project, zone, instanceGroupManager);
        }

        /// <summary>Returns the specified Instance Group Manager resource.</summary>
        public class GetRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManager>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Name of the instance resource to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Creates an instance group manager, as well as the instance group and the specified number of
        /// instances.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="size">Number of instances that should
        /// exist.</param>
        public virtual InsertRequest Insert(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManager body, string project, string zone, int size)
        {
            return new InsertRequest(service, body, project, zone, size);
        }

        /// <summary>Creates an instance group manager, as well as the instance group and the specified number of
        /// instances.</summary>
        public class InsertRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManager body, string project, string zone, int size)
                : base(service)
            {
                Project = project;
                Zone = zone;
                Size = size;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Number of instances that should exist.</summary>
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("size", Google.Apis.Util.RequestParameterType.Query)]
            public virtual int Size { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManager Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "size", new Google.Apis.Discovery.Parameter
                    {
                        Name = "size",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves the list of Instance Group Manager resources contained within the specified
        /// zone.</summary>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        public virtual ListRequest List(string project, string zone)
        {
            return new ListRequest(service, project, zone);
        }

        /// <summary>Retrieves the list of Instance Group Manager resources contained within the specified
        /// zone.</summary>
        public class ListRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagerList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string zone)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Optional. Filter expression for filtering listed resources.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>Optional. Maximum count of results to be returned. Maximum value is 500 and default value is
            /// 500.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a
            /// previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Recreates the specified instances. The instances are deleted, then recreated using the instance
        /// group manager's current instance template.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        public virtual RecreateInstancesRequest RecreateInstances(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersRecreateInstancesRequest body, string project, string zone, string instanceGroupManager)
        {
            return new RecreateInstancesRequest(service, body, project, zone, instanceGroupManager);
        }

        /// <summary>Recreates the specified instances. The instances are deleted, then recreated using the instance
        /// group manager's current instance template.</summary>
        public class RecreateInstancesRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new RecreateInstances request.</summary>
            public RecreateInstancesRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersRecreateInstancesRequest body, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersRecreateInstancesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "recreateInstances"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances"; }
            }

            /// <summary>Initializes RecreateInstances parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Resizes the managed instance group up or down. If resized up, new instances are created using the
        /// current instance template. If resized down, instances are removed in the order outlined in Resizing a
        /// managed instance group.</summary>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        /// <param name="size">Number of instances that should exist in this Instance
        /// Group Manager.</param>
        public virtual ResizeRequest Resize(string project, string zone, string instanceGroupManager, int size)
        {
            return new ResizeRequest(service, project, zone, instanceGroupManager, size);
        }

        /// <summary>Resizes the managed instance group up or down. If resized up, new instances are created using the
        /// current instance template. If resized down, instances are removed in the order outlined in Resizing a
        /// managed instance group.</summary>
        public class ResizeRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new Resize request.</summary>
            public ResizeRequest(Google.Apis.Services.IClientService service, string project, string zone, string instanceGroupManager, int size)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Size = size;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }

            /// <summary>Number of instances that should exist in this Instance Group Manager.</summary>
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("size", Google.Apis.Util.RequestParameterType.Query)]
            public virtual int Size { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "resize"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize"; }
            }

            /// <summary>Initializes Resize parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "size", new Google.Apis.Discovery.Parameter
                    {
                        Name = "size",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Sets the instance template to use when creating new instances in this group. Existing instances are
        /// not affected.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        public virtual SetInstanceTemplateRequest SetInstanceTemplate(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetInstanceTemplateRequest body, string project, string zone, string instanceGroupManager)
        {
            return new SetInstanceTemplateRequest(service, body, project, zone, instanceGroupManager);
        }

        /// <summary>Sets the instance template to use when creating new instances in this group. Existing instances are
        /// not affected.</summary>
        public class SetInstanceTemplateRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new SetInstanceTemplate request.</summary>
            public SetInstanceTemplateRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetInstanceTemplateRequest body, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetInstanceTemplateRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setInstanceTemplate"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate"; }
            }

            /// <summary>Initializes SetInstanceTemplate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Modifies the target pools to which all new instances in this group are assigned. Existing instances
        /// in the group are not affected.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The Google Developers Console project name.</param>
        /// <param name="zone">The name of the
        /// zone in which the instance group manager resides.</param>
        /// <param name="instanceGroupManager">The name of the
        /// instance group manager.</param>
        public virtual SetTargetPoolsRequest SetTargetPools(Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetTargetPoolsRequest body, string project, string zone, string instanceGroupManager)
        {
            return new SetTargetPoolsRequest(service, body, project, zone, instanceGroupManager);
        }

        /// <summary>Modifies the target pools to which all new instances in this group are assigned. Existing instances
        /// in the group are not affected.</summary>
        public class SetTargetPoolsRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new SetTargetPools request.</summary>
            public SetTargetPoolsRequest(Google.Apis.Services.IClientService service, Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetTargetPoolsRequest body, string project, string zone, string instanceGroupManager)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InstanceGroupManager = instanceGroupManager;
                Body = body;
                InitParameters();
            }


            /// <summary>The Google Developers Console project name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the zone in which the instance group manager resides.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The name of the instance group manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instanceGroupManager", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string InstanceGroupManager { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Replicapool.v1beta2.Data.InstanceGroupManagersSetTargetPoolsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setTargetPools"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools"; }
            }

            /// <summary>Initializes SetTargetPools parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instanceGroupManager", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instanceGroupManager",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }
    }

    /// <summary>The "zoneOperations" collection of methods.</summary>
    public class ZoneOperationsResource
    {
        private const string Resource = "zoneOperations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ZoneOperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Retrieves the specified zone-specific operation resource.</summary>
        /// <param name="project">Name of the project scoping this request.</param>
        /// <param name="zone">Name of the zone
        /// scoping this request.</param>
        /// <param name="operation">Name of the operation resource to return.</param>
        public virtual GetRequest Get(string project, string zone, string operation)
        {
            return new GetRequest(service, project, zone, operation);
        }

        /// <summary>Retrieves the specified zone-specific operation resource.</summary>
        public class GetRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string zone, string operation)
                : base(service)
            {
                Project = project;
                Zone = zone;
                Operation = operation;
                InitParameters();
            }


            /// <summary>Name of the project scoping this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the zone scoping this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Name of the operation resource to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("operation", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Operation { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/operations/{operation}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "operation", new Google.Apis.Discovery.Parameter
                    {
                        Name = "operation",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Retrieves the list of operation resources contained within the specified zone.</summary>
        /// <param name="project">Name of the project scoping this request.</param>
        /// <param name="zone">Name of the zone
        /// scoping this request.</param>
        public virtual ListRequest List(string project, string zone)
        {
            return new ListRequest(service, project, zone);
        }

        /// <summary>Retrieves the list of operation resources contained within the specified zone.</summary>
        public class ListRequest : ReplicapoolBaseServiceRequest<Google.Apis.Replicapool.v1beta2.Data.OperationList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string zone)
                : base(service)
            {
                Project = project;
                Zone = zone;
                InitParameters();
            }


            /// <summary>Name of the project scoping this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the zone scoping this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>Optional. Filter expression for filtering listed resources.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>Optional. Maximum count of results to be returned. Maximum value is 500 and default value is
            /// 500.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a
            /// previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/operations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.Replicapool.v1beta2.Data
{    

    /// <summary>An Instance Group Manager resource.</summary>
    public class InstanceGroupManager : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The autohealing policy for this managed instance group. You can specify only one value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoHealingPolicies")]
        public virtual System.Collections.Generic.IList<ReplicaPoolAutoHealingPolicy> AutoHealingPolicies { get; set; } 

        /// <summary>The base instance name to use for instances in this group. The value must be a valid RFC1035 name.
        /// Supported characters are lowercase letters, numbers, and hyphens (-). Instances are named by appending a
        /// hyphen and a random four-character string to the base instance name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("baseInstanceName")]
        public virtual string BaseInstanceName { get; set; } 

        /// <summary>[Output only] The time the instance group manager was created, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>[Output only] The number of instances that currently exist and are a part of this group. This
        /// includes instances that are starting but are not yet RUNNING, and instances that are in the process of being
        /// deleted or abandoned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentSize")]
        public virtual System.Nullable<int> CurrentSize { get; set; } 

        /// <summary>An optional textual description of the instance group manager.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output only] Fingerprint of the instance group manager. This field is used for optimistic locking.
        /// An up-to-date fingerprint must be provided in order to modify the Instance Group Manager resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>[Output only] The full URL of the instance group created by the manager. This group contains all of
        /// the instances being managed, and cannot contain non-managed instances.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("group")]
        public virtual string Group { get; set; } 

        /// <summary>[Output only] A server-assigned unique identifier for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>The full URL to an instance template from which all new instances will be created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instanceTemplate")]
        public virtual string InstanceTemplate { get; set; } 

        /// <summary>[Output only] The resource type. Always replicapool#instanceGroupManager.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The name of the instance group manager. Must be 1-63 characters long and comply with RFC1035.
        /// Supported characters include lowercase letters, numbers, and hyphens.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output only] The fully qualified URL for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The full URL of all target pools to which new instances in the group are added. Updating the target
        /// pool values does not affect existing instances.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetPools")]
        public virtual System.Collections.Generic.IList<string> TargetPools { get; set; } 

        /// <summary>[Output only] The number of instances that the manager is attempting to maintain. Deleting or
        /// abandoning instances affects this number, as does resizing the group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetSize")]
        public virtual System.Nullable<int> TargetSize { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagerList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Unique identifier for the resource; defined by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A list of instance resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<InstanceGroupManager> Items { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>A token used to continue a truncated list request (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Server defined URL for this resource (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagersAbandonInstancesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The names of one or more instances to abandon. For example: { 'instances': [ 'instance-c3po',
        /// 'instance-r2d2' ] }</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instances")]
        public virtual System.Collections.Generic.IList<string> Instances { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagersDeleteInstancesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Names of instances to delete.
        ///
        /// Example: 'instance-foo', 'instance-bar'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instances")]
        public virtual System.Collections.Generic.IList<string> Instances { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagersRecreateInstancesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The names of one or more instances to recreate. For example: { 'instances': [ 'instance-c3po',
        /// 'instance-r2d2' ] }</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instances")]
        public virtual System.Collections.Generic.IList<string> Instances { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagersSetInstanceTemplateRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The full URL to an Instance Template from which all new instances will be created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instanceTemplate")]
        public virtual string InstanceTemplate { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class InstanceGroupManagersSetTargetPoolsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The current fingerprint of the Instance Group Manager resource. If this does not match the server-
        /// side fingerprint of the resource, then the request will be rejected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>A list of fully-qualified URLs to existing Target Pool resources. New instances in the Instance
        /// Group Manager will be added to the specified target pools; existing instances are not affected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetPools")]
        public virtual System.Collections.Generic.IList<string> TargetPools { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An operation resource, used to manage asynchronous API requests.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output only] An optional identifier specified by the client when the mutation was initiated. Must
        /// be unique for all operation resources in the project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientOperationId")]
        public virtual string ClientOperationId { get; set; } 

        /// <summary>[Output Only] The time that this operation was requested, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>[Output Only] The time that this operation was completed, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual string EndTime { get; set; } 

        /// <summary>[Output Only] If errors occurred during processing of this operation, this field will be
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Operation.ErrorData Error { get; set; } 

        /// <summary>[Output only] If operation fails, the HTTP error message returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorMessage")]
        public virtual string HttpErrorMessage { get; set; } 

        /// <summary>[Output only] If operation fails, the HTTP error status code returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorStatusCode")]
        public virtual System.Nullable<int> HttpErrorStatusCode { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource, generated by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] The time that this operation was requested, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>[Output only] Type of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] Name of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output only] Type of the operation. Operations include insert, update, and delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>[Output only] An optional progress indicator that ranges from 0 to 100. There is no requirement
        /// that this be linear or support any granularity of operations. This should not be used to guess at when the
        /// operation will be complete. This number should be monotonically increasing as the operation
        /// progresses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("progress")]
        public virtual System.Nullable<int> Progress { get; set; } 

        /// <summary>[Output Only] URL of the region where the operation resides. Only available when performing
        /// regional operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>[Output Only] Server-defined fully-qualified URL for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Output Only] The time that this operation was started by the server, in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>[Output Only] Status of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>[Output Only] An optional textual description of the current status of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>[Output Only] Unique target ID which identifies a particular incarnation of the target.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetId")]
        public virtual System.Nullable<ulong> TargetId { get; set; } 

        /// <summary>[Output only] URL of the resource the operation is mutating.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetLink")]
        public virtual string TargetLink { get; set; } 

        /// <summary>[Output Only] User who requested the operation, for example: user@example.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("user")]
        public virtual string User { get; set; } 

        /// <summary>[Output Only] If there are issues with this operation, a warning is returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<Operation.WarningsData> Warnings { get; set; } 

        /// <summary>[Output Only] URL of the zone where the operation resides. Only available when performing per-zone
        /// operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>[Output Only] If errors occurred during processing of this operation, this field will be
        /// populated.</summary>
        public class ErrorData
        {
            /// <summary>[Output Only] The array of errors encountered while processing this operation.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("errors")]
            public virtual System.Collections.Generic.IList<ErrorData.ErrorsData> Errors { get; set; } 

            

            public class ErrorsData
            {
                /// <summary>[Output Only] The error type identifier for this error.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("code")]
                public virtual string Code { get; set; } 

                /// <summary>[Output Only] Indicates the field in the request which caused the error. This property is
                /// optional.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("location")]
                public virtual string Location { get; set; } 

                /// <summary>[Output Only] An optional, human-readable error message.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("message")]
                public virtual string Message { get; set; } 

            }
        }    

        public class WarningsData
        {
            /// <summary>[Output only] The warning type identifier for this warning.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>[Output only] Metadata for this warning in key:value format.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>[Output only] Optional human-readable details for this warning.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>[Output Only] Metadata key for this warning.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>[Output Only] Metadata value for this warning.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }    

    public class OperationList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Unique identifier for the resource; defined by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The operation resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Operation> Items { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>A token used to continue a truncated list request (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Server defined URL for this resource (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ReplicaPoolAutoHealingPolicy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The action to perform when an instance becomes unhealthy. Possible values are RECREATE or REBOOT.
        /// RECREATE replaces an unhealthy instance with a new instance that is based on the instance template for this
        /// managed instance group. REBOOT performs a soft reboot on an instance. If the instance cannot reboot, the
        /// instance performs a hard restart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actionType")]
        public virtual string ActionType { get; set; } 

        /// <summary>The URL for the HealthCheck that signals autohealing.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("healthCheck")]
        public virtual string HealthCheck { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
